
\section{Introducción}

En este trabajo se estudia el funcionamiento de un componente importante en los motores de bases de datos: el \textbf{Buffer Manager}. Más específicamente nos centraremos en la \textbf{estrategia de reemplazo de páginas} de éste.

Dado que el acceso a memoria secundaria para la lectura o modificación de información es una tarea costosa en términos de tiempo, cuando una transacción solicita el acceso a un bloque de datos, éste es dispuesto en memoria no sólo durante el tiempo en que la transacción lo requiere, sino que en ocasiones se lo alberga un tiempo más bajo la especulación de que puede ser solicitado nuevamente en el futuro. Para esto es necesaria una heurística capaz de decidir durante cuánto tiempo se debe dejar un bloque en memoria, y cuál será desalojado en caso de necesitarse el espacio para cumplir con una nueva solicitud.

Este mecanismo de \textit{caching} es similar al implementado por los sistemas operativos respecto de las páginas de memoria cuando se utiliza memoria virtual. Sin embargo los motores de bases de datos implementan su propio mecanismo para satisfacer sus requerimientos específicos. El componente que lleva a cabo esta tarea es el mencionado Buffer Manager.

La información que una base de datos guarda en memoria secundaria (tablas, índices, etc...) es dividida en bloques de igual tamaño para simplificar el caching. Cuando algún componente del motor necesita el acceso a un bloque, lo solicita al Buffer Manager. Éste en primer lugar busca el bloque en su caché. En caso de estar ausente, solicita el bloque a un componente de más bajo nivel que lo traerá de memoria secundaria. Una vez conseguido el bloque deberá alojarlo en la caché, así que si no hay espacio disponible deberá desalojar uno de los bloques presentes, elegido de acuerdo a alguna heurística.

Esta heurística es la estrategia de reemplazo de páginas, tema del trabajo.
